/*
Esta clase sirve para que cualquier pagina pueda publicar eventos
los cuales seran reenviados a las Paginas subscriptas (llamando a la funcion manejadora que corresponda)
*/


Events.subscribes  = new Array();


//Esta funcion le pemite publicar un evento con sus respectivos argumentos
//subscription cualquier pagina.
//La clase verificara si hay ventanas subscriptas al evento y en caso de
//haberlas llamara subscription la funcion manejadora para cada una de estas
Events.raiseEvent = function(name, args)
{
	var i;
	var subscription = Events.subscribes[name]
	
	if (subscription)
	{
		for (i=0; i<subscription.length;i++)
		{
			this.WindowHandler.SendMsgWindow(subscription[i][0],subscription[i][1]+"("+args+")");
		}
	}
}

//Esta funcion le permite subscription una ventana del framework subscribirse subscription un evento
//cada subscripcion es un par ordenado: 
//id de la ventana que se subscribe y nombre de la funcion manejadora
//devuelve false si la ventana ya estaba subscripta subscription ese evento
Events.subscribeEvent = function(idwindow, name, manager)
{
	var i = 0;
	var encontro = false;
	var ok = false;
	var subscription;
	
	if (Events.subscribes[name])
	{
		subscription = Events.subscribes[name];
		while ((i<subscription.length) && (!encontro))
		{
			encontro = (subscription[i][0]==idwindow);
			i++;
		}
		if (!encontro)
        {		
			subscription[subscription.length] = new Array(idwindow, manager);
			ok = true;
		}
	}
	else
	{
		Events.subscribes[name] = new Array(); //Array de subscripciones
		Events.subscribes[name][0] = new Array(idwindow, manager); 
		ok = true;
	}
	
	return(ok);
}

//Esta funcion le permite subscription una ventana del framework desubscribirse de un evento
//Devuelve true si pudo desubscribirse
Events.unsubscribeEvent function(idwindow, name)
{
	var i = 0;
	var len = 0;
	var encontro = false;
	var subscription = Events.subscribes[name];
	if (!subscription) return false;

	i = 0;
	len = subscription.length;

	while ((i<len) && (!encontro))
	{
		if (subscription[i][0] == idwindow)
		{
			if (subscription.length==1)	//unica subscripcion
			{
				subscription = undefined;
			}
			else  //borro la subscripcion
			{ 
				for (j=i; j<subscription.length-1; j++)
				{
					subscription[j] = subscription[j+1];
				}
				subscription.length--; 
			}
			encontro = true;
		} 	
		i++;
	}
	
	return(encontro);
}
